package com.bbz.core.lambda.java8.Chapter_10_Optional;


import java.util.Optional;

/**
 * 使用Optional取代null
 */
public class OptionTest {

    //从Optional对象中提取信息
    public static void main(String args[]) {
        //创建一个空的Optional
        Optional<Car> optional = Optional.empty();

        //创建非空的Optional,如果car是一个null，这段代码会立即抛出一个NullPointerException，而不是等到你试图访问car的属性值时才返回一个错误。
        Car car = new Car();
        Optional<Car> optional1 = Optional.of(car);

        //创建可接受null的Optional,如果car是null，那么得到的Optional对象就是个空对象。
        Optional<Car> optional2 = Optional.ofNullable(car);
        /**
         *  如果Optional包含一个值，那函数就将该值作为参数传递给map，对该值进行转换。如
         *         果Optional为空，就什么也不做
         */
        Optional<String> color = optional1.map(Car::getColor);


    }
    public String getCarColor(Optional<Person> person) {
        return person.flatMap(Person::getCar)
                .map(Car::getColor)
                .orElse("Unknown");
    }
}
